<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <script>
        /*
          逻辑运算符有短路，只存在于 && 和 ||
          短路：如果能通过左边确定结果，就没必要执行右边
            &&:  一假则假，左边为假就短路
            ||： 一真则真，左边为真就短路
        */
       /*
       let num = 10

       // 没有短路，意味着右边会执行
    //    true && num++ 
    //    console.log(num) // 11

      // 左边能短路，右边不执行
    //    false && num++ 
    //    console.log(num) // 10
    //    false && ++num
    //    console.log(num) // 10

        // 左边短路了，右边不执行
        true || num++
        console.log(num) // 10
        */
        
        /*
            逻辑运算符组成的式子叫 逻辑运算式
            既然是运算，就一定会有运算结果
            逻辑运算式的运算不一定是布尔值

            逻辑运算式的运算结果跟是否短路有关
                如果短路了，整个式子的结果就是左边的结果
                如果没短路，整个式子的结果就是右边的结果
        */

        // 因为左边没短路，所以整个式子结果就是右边的结果，所以是8
        // const res1 = 10 + 20 && 3 + 5
        // console.log(res1) // 8

        // const res2 = 10 * 0 && 3 + 5
        // console.log(res2) // 0

        // 我以前得到true和false，是因为它左边的运算和右边的运算用的是比较运算
        // 本身就会得到true和false
        // const age = 19
        // const res3 = age >= 18 && age <= 100
        // console.log(res3) // true

        // &&： 一假则假  ||：一真则真
        // alert(1||2)


        // let num = 1

        // // 后--： 先用原来的值参与运算，然后才--
        // // 所以这里相当于得到   const res = 1 || 30
        // // const res = num-- || 30
        // // console.log(res) // 1
        // // console.log(num) // 0

        // // 前--：先--，再用--后的值参与运算，所以先算--num，num变成0
        // // const res = 0 || 30
        // const res = --num || 30
        // console.log(res) // 30
        // console.log(num) // 0
    </script>
</body>
</html>